Travel Buddy

Analysis
Design
Code
Optimization
Java
Vaadin
OR tools
Authors
Published

May 4, 2026

Travel Buddy allows users to enter a one-way, round-trip, or multi-city destination selection within Europe. It takes this information and recommends the best flight to take, what hotel to stay at, and some facts about the city. It takes data from a Flight API, Hotel API, and data sets with airport and city information.

Travel Buddy would not be what it is without my teammates Molly Lingenfelter and Diana Batista Peralta. We were able to collaborate to create something really special with this project and we each put in a lot of time and effort towards it.

Skills used

A key industrial engineering concept we used was a traveling salesperson Google OR-tool to determine the optimal order of cities to visit. We created custom Java classes to solve each individual type of search. Within these classes we used APIs to get our flight and hotel information. We utilized ArrayLists to save the itinerary that the user selects so it can be output as well. In order to output the saved CSV file that is created through creating an itinerary we needed to use a class to convert any Tablesaw table to a list to be output as a grid. We used Vaadin to tie together our project for a cohesive user experience. Our team was able to coordinate working on the project using GitHubs code with me feature as well as coordinating when each of us would be making changes for each class.

Project Development Process

Our original goal was to create a website where users could input the cities that they wanted to travel to as well as their budget. The goal was for the website to give the best order and flights to go on as well as some activities and other time frames to go.

As we worked on the project we realized that taking a budget and having a database of all the activities wasn’t feasible. Instead, we were able to implement a hotel API that gave suggestions to the user as well as adding a function to add flights to an itinerary to save or view later. One big challenge that we faced was determining how to find the “best” output for flights. With there being so many factors that go into each flight we needed to pick what was most important. We decided that having a duration and price option was the best way to do this. The order of flights are determined by a traveling salesperson Google OR problem by either using the duration or price. Each flight is then scored on a scale from 0-100, 100 being the best given the price or duration of all the flights on that day.

Our final project mostly matched our original expectations. We did have to change our scope a little bit along the way but we were also able to add on more features. We added a save to itinerary function, view itinerary, and were able to output some extra information about each city that the user selects to go to. Even though our end project is different from our original plan, we think that it still serves a good purpose for the user.

Here is our one way flight And here is our multi-city flight

Key Features

Before our code is able to select the best flight for multi-city, it first needs to determine the best order for the flights. We utilized a traveling salesperson model to solve this. It takes the duration or price for each combination of flights and inputs them into the model. The solution that the model gives is then able to be used to create a new search that is limited to each of the selected flights in their order.

What determines the best flight?

We knew that since price and duration were on different scales and fluctuated based on a range of factors that we needed to come up with a way to score them. We decided to go about this by giving each of them weights and systematically going through and finding the lowest and highest option. This was then able to be used to directly compare each price or duration.

Reflection

This project taught me the importance of organizing my code. As I was collaborating with my group we quickly saw the importance of keeping our code in sections and adding plenty of comments. One contribution that I made that I’m particularly proud of is the traveling salesperson functionality to determine the order for our multi-city search. I am also proud that I was able to create the functionality to add, save, and view itineraries. Throughout this project I grew as a teammate by working with my team along the way to make this project as good as possible. We were able to improve on our coordination as we went and worked towards our shared vision for the project. After this project, I feel a lot more confident in my ability to code more open-endedly. I was able to figure what steps to take to get my desired end result and solve any issues that I came across along the way.